package com.songshuai.webapi.permission.service;

import com.songshuai.webapi.baseapi.dto.UserBaseInfoDto;
import com.songshuai.webapi.baseapi.dto.feign.request.UserAddReqDto;
import com.songshuai.webapi.baseapi.dto.feign.request.UserInfoUpdateReqDto;
import com.songshuai.webapi.baseapi.pojo.BaseParmDto;
import com.songshuai.webapi.baseapi.pojo.QueryPageRes;
import com.songshuai.webapi.baseapi.pojo.QueryResponse;
import com.songshuai.webapi.baseapi.dto.feign.response.AccountInfoResDto;
import com.songshuai.webapi.baseapi.dto.feign.response.AccountPageLIstResDto;
import com.songshuai.webapi.baseapi.dto.feign.response.AccountInfoListResDto;
import com.songshuai.webapi.permission.Util.PageUtil;
import com.songshuai.webapi.permission.dto.po.UserHasPermissionPojo;
import com.songshuai.webapi.permission.dto.po.UsersResPojo;
import com.songshuai.webapi.permission.dto.request.*;
import com.songshuai.webapi.permission.dto.request.Departments.*;
import com.songshuai.webapi.permission.dto.response.RolesLoginResDto;
import com.songshuai.webapi.permission.dto.response.UserResDto;
import com.songshuai.webapi.permission.model.YxUsers;

import java.util.List;
import java.util.Map;

public interface UsersService {

    //查询列表用户
    List<YxUsers> queryUsersForStr(String ids);

    //分页查询部门用户
    PageUtil selectUsersForDeparent(BaseParmDto<UserListReqDto> request);

    //添加部门用户
    void insertDepartmentUser(AddDepartmentUserReqDto addDepartmentUserReqDto);

    //调入已有用户/设置部门关系
    void updateUserDepartment(UpdateUserDepartmentReqDto updateUserDepartment);

    //设置部门领导
    void updateDepartmentsLeader(UpdateDepartmentsLeaderReqDto updateDepartmentsLeaderReqDto);

    //设置部门领导-人员列表
    List<UsersResPojo> updateDepartmentsLeaderUserList(UpdateDepartmentsLeaderUserListReqDto updateDepartmentsLeaderUserListReqDto);

    //设置部门领导-回填人员列表
    List<UsersResPojo> updateDepartmentsLeaderBackUserList(UpdateDepartmentsLeaderBackUserListReqDto updateDepartmentsLeaderBackUserListReqDto);

    //调入已有用户/设置部门关系-人员列表
    List<UsersResPojo> updateUserDepartmentUserList(UpdateUserDepartmentUserListReqDto updateUserDepartmentUserListReqDto);

    //根据登录用户获取菜单和功能
    Map<String,Object> queryLoginNavAndFunc(Integer appId);

    //根据id查询用户信息
    UserResDto queryUserById(Integer id);

    //修改用户信息
    boolean updateUser(UserUpdateReqDto parmDto);

    //移出部门
    boolean deleteDepartmentUserRelation(Integer userId,Integer departmentId);

    //员工离职/入职，leave离职操作，onjob入职操作
    boolean updateUserLeave(UserUpdateLeaveReqDto resDto);

    //查询登录用户的角色
    List<RolesLoginResDto> queryLoginRolesList(Integer userId);

    //查询登录用户的权限
    Map<String, Object> queryLoginNavAndFuncList(Integer userId, Integer appId);

    //分配角色
    boolean addUserRoleRelation(UserRelateRoleReqDto resDto);

    //分配菜单
    boolean addUserNavigationRelation(UserRelateNavigationReqDto resDto);

    //重置密码
    boolean resetPwd(Integer id);

    //根据主键查询用户信息
    YxUsers selectByPrimaryKey(Integer id);

    //根据id修改用户信息
    boolean updateByPrimaryKeySelective(YxUsers yxUsers);

    //查询登录用户菜单并对当前用户已配置首页返填
    Map<String, Object> queryLoginHomePageList(Integer userId, Integer appId);

    //首页配置
    boolean addHomePage(HomepageConfigReqDto parmDto);

    //根据用户名查询用户信息
    YxUsers getUserInfoByUsername(Integer flag, String username);

    //根据用户名查询当前用户（提供给CRM项目，非手机号即用户名）
    YxUsers getCurrentUser(Integer type, String username);

    UserHasPermissionPojo getUserPermissionInfo(Integer flag, String username);

    /**
     * 根据用户id获取用户列表
     * @param userIds
     * @return
     */
    List<UserBaseInfoDto>getUsersByIds(List<Integer>userIds);

    /**
     * 根据校区id获取用户信息
     * @param campusId
     * @param isAll 是否全部用户
     * @return
     */
    List<UserBaseInfoDto>getUsersByCampusId(Integer campusId,Boolean isAll);
    /**
     * 根据用户名或手机号模糊查询
     * @param account
     * @param status
     * @return
     */
    QueryResponse<QueryPageRes<List<AccountPageLIstResDto>>> selectByMobileOrName(String account, Integer status, int pageIndex, int pageSize);

    /**
     * 新增用户
     * @param userInfo
     * @return
     */
    QueryResponse addUser(UserAddReqDto userInfo);

    /**
     * 根据id查询用户详情
     * @param id
     * @return
     */
    AccountInfoResDto selectUserById(Integer id);

    /**
     * 修改用户
     * @return
     */
    boolean updateUser(UserInfoUpdateReqDto requset);

    //根据多个id查询用户信息
    List<AccountInfoListResDto> queryUserInfoByIds(List<Integer> userIds);

    //根据校区查询出非userId的用户信息
    List<AccountInfoListResDto> queryUserInfoListByCampusId(Integer userId,Integer campusId);

    //根据真实姓名模糊查询用户信息
    List<AccountInfoListResDto> queryUserInfoListByTrueName(String trueName,Integer campusId);
}
